/**
 * Created with IntelliJ IDEA.
 * Description:多线程学习
 * @进程
 * 操作系统中一个正在执行的程序（有多并发进程--->宏观多并发，微观cpu一个个执行即串行）
 * @线程(Thread)
 * 进程的组成单元，一个进程包含多个线程，进程中一个任务对应一个线程。
 * 主线程：main由JVM创建并开启。在main线程中执行main(),main()结束，main线程结束
 * 多个线程共享一个进程的资源！cpu、磁盘、内存、网络等 -----> 对于内存资源：栈空间独立(个自有个子的栈帧)，堆空间共享
 * 线程执行要随机抢占CPU(CPU资源很少) ---> 随机是因为cpu的时间片要被抢，每个时间片被谁抢到是随机的！
 * @创建线程(自定义线程)
 * 1、继承Thread类，覆盖run方法(想实现的功能代码)
 *      定义Thread类 ----> 在子类中覆盖父类的run ---> 创建自定义线程的对象 ----> 调用线程对象的start方法
 * 2、实现Runnable接口，实现run抽象方法
 *      定义类，实现Runnable接口 ----> 实现Runnable的抽象方法 ---> 创建Thread类的对象，传入当前线程类的对象作为参数---->调用线程对象的start方法
 * 1和 2的总结：
 * @start和run的区别
 * start：启动线程(必须调start)，底层代码会默认run(不调run也可执行,但不会开启新的线程，都在main线程中执行即从上向下执行)
 * run：执行线程功能的代码
 * @线程相关的API
 * 继承Thread类: 设置线程名称 ----> setName() 获取线程名称 ---> getName() -----》这种是继承Thread类
 * 实现Runnable接口:
 *   &关于线程控制：
 *      计时等待： (static)sleep(long 毫秒) ---> 让线程休眠n毫秒 ----->先让其他线程执行，n毫秒后在让其进入就绪状态，和其他线程抢cpu
 *      无计时等待： join() ---> 谁调join谁先执行
 *
 * @线程状态
 *  初始状态：
 *  就绪状态：
 *  运行状态：
 *  终止状态：
 * User: cp
 * Date: 2023-11-07
 * Time: 10:04
 */

public class TestDemo {
    public static void main(String[] args) {

    }
}

